import java.util.Random;
import java.util.Scanner;

public class Hero {
    // 姓名
    private String name;
    // 血型
    private int blood;

    // 性别
    private char gender;
    // 脸型
    private String face;

   // 定义男生脸型数组
    String[] boyFaces = {"风流俊雅", "武艺高强", "超凡脱俗", "相貌英俊", "温文尔雅", "玉树临风", "一塌糊涂", "面目狰狞" };

// 定义女生脸型数组
    String[] girlFaces = {"亭亭玉立", "楚楚动人", "闭月羞花", "沉鱼落雁", "花枝招展", "婷婷玉体", "相貌丑陋", "惨不忍睹" };
// 定义攻击描述数组
    String[] attacks_desc = {
// 攻击1
            "%s使出了一招【背心钉】，转到对方的身后，一掌向%s背心的灵台穴猛击！",
// 攻击2
            "%s使出了一招【游空探月】，轻巧地飞到了半空，一掌向%s胸口的要穴猛击！",
// 攻击3
            "%s使出了一招【劈山碎岩】，猛地向前一劈，向%s心脏所在的要害猛击！",
// 攻击4
            "%s使出了一招【鹤翼齐飞】，迅速向两侧闪开，一掌向%s的要害猛击！",
// 攻击5
            "%s大喊一声，身形下浮，一招【落花流水】，向%s四周的敌人猛击！",
// 攻击6
            "%s使出了一招【满江红】，身形一变，一掌向%s心脏猛击！",
// 攻击7
            "%s使出了一招【碧血剑】，一剑向%s心脏所在的要害猛击！",
// 攻击8
            "%s使出了一招【葵花宝典】，一掌向%s要害所在的要害猛击！",
    };

    // 定义一个字符串数组，用来存储受伤描述
    String[] injureds_desc = {
            "结果%s退了一步，毫发无损",
            "结果给%s造成了一点点伤害",
            "结果一击命中，%s痛的弯下了腰",
            "结果%s痛苦滴闷哼了一声，显然受了点内伤",
            "结果%s瑶瑶晃晃，一摔跤倒在地上",
            "结果%s脸色一下变得惨白，连退了好几部",
            "结果轰的一声，%s口中鲜血狂喷而出",
            "结果%s一声惨叫，然后倒地不起",
    };

    // 构造方法
    public Hero() {
    }

    // 带参数的构造方法
    public Hero(String name, int blood, char gender) {

        this.name = name;
        this.blood = blood;
        this.gender = gender;
        // 调用setFace方法，设置英雄的面部特征
        setFace(gender);
    }

    // 设置血型
    public void setBlood(int blood) {
        this.blood = blood;
    }

    // 获取血型
    public int getBlood() {
        return blood;
    }

    // 设置性别
    public void setGender(char gender) {
        this.gender = gender;
    }

    // 获取性别
    public char getGender() {
        return gender;
    }


    public void setName(String name) {
        // 设置姓名
        this.name = name;
    }

    public String getName() {
        // 获取姓名
        return name;
    }

    public void setFace(char gender) {
        // 根据性别设置头像
        Random r = new Random();

        if (gender == '男') {
            // 随机获取男生头像
            int index = r.nextInt(boyFaces.length);
            this.face = boyFaces[index];
        } else if (gender == '女') {
            // 随机获取女生头像
            int index = r.nextInt(girlFaces.length);
            this.face = girlFaces[index];
        } else {
            // 没有性别，设置默认头像
            this.face = "面目狰狞";
        }
    }

   // 获取面容
    public String getFace() {
        return face;
    }

// 英雄信息
    public void heroInfo() {
        System.out.println("姓名：" + getName());
        System.out.println("血量：" + getBlood());
        System.out.println("性别：" + getGender());
        System.out.println("面容：" + getFace());
    }

    public void attack(Hero hero) {
        //随机生成一个伤害值
        Random random = new Random();
        int hurt = random.nextInt(20) + 1;
        //随机生成一个攻击描述
        Random r = new Random();
        int index = r.nextInt(attacks_desc.length);
        //计算剩余血量
        int remainBlood = getBlood() - hurt;
        //获取攻击描述
        String kunFu = attacks_desc[index];
        System.out.printf(kunFu, this.getName(), hero.getName());
        //剩余血量不能小于0
        remainBlood = Math.max(remainBlood, 0);
        //设置英雄的血量
        hero.setBlood(remainBlood);
        //受伤的描述
        //判断剩余血量，选择对应的受伤描述
        if (remainBlood > 90) {
            String str = injureds_desc[0];
            System.out.printf(str, hero.getName());
            System.out.println();
        }else if (remainBlood > 80) {
            String str = injureds_desc[1];
            System.out.printf(str, hero.getName());
            System.out.println();
        }else if (remainBlood > 70) {
            String str = injureds_desc[2];
            System.out.printf(str, hero.getName());
            System.out.println();
        }else if (remainBlood > 60) {
            String str = injureds_desc[3];
            System.out.printf(str, hero.getName());
            System.out.println();
        }else if (remainBlood > 50) {
            String str = injureds_desc[4];
            System.out.printf(str, hero.getName());
            System.out.println();
        }else if (remainBlood > 40) {
            String str = injureds_desc[5];
            System.out.printf(str, hero.getName());
            System.out.println();
        }else if (remainBlood > 30) {
            String str = injureds_desc[6];
            System.out.printf(str, hero.getName());
            System.out.println();
        }else {
            String str = injureds_desc[7];
            System.out.printf(str, hero.getName());
            System.out.println();
        }


    }


    public static void main(String[] args) {
        // 创建一个Scanner对象，用于接收用户的输入
        Scanner sc = new Scanner(System.in);
        // 提示用户输入英雄的名字和性别
        System.out.println("请输入英雄的名字和性别:");
        // 获取用户输入的第一个英雄的名字
        String name1 = sc.nextLine();
        // 提示用户输入第二个英雄的名字和性别
        System.out.println("请输入英雄的名字和性别: ");
        // 获取用户输入的第二个英雄的名字
        String name2 = sc.nextLine();
        // 创建第一个英雄的对象
        Hero h = new Hero(name1, 100, '男');
        // 创建第二个英雄的对象
        Hero h2 = new Hero(name2, 100, '男');

        // 调用第一个英雄的info方法，显示英雄信息
        h.heroInfo();
        // 调用第二个英雄的info方法，显示英雄信息
        h2.heroInfo();
        // 使用循环，让两个英雄互相攻击，直到其中一个英雄的血量为0
        while (true)
        {
            // 调用第一个英雄的attack方法，攻击第二个英雄
            h.attack(h2);
            // 如果第二个英雄的血量为0，则输出第一个英雄获胜，并退出循环
            if (h2.getBlood() == 0) {
                System.out.println(h.getName() + " K O 了 "+h2.getName());
                break;
            }
            // 调用第二个英雄的attack方法，攻击第一个英雄
            h2.attack(h);
            // 如果第一个英雄的血量为0，则输出第二个英雄获胜，并退出循环
            if (h.getBlood() == 0) {
                System.out.println(h2.getName() + " K O 了 "+h.getName());
                break;
            }
        }

    }
}

